package com.ksd.result;


/**
 * 统一返回对象工具类
 * Created by carlo on 2019/4/19.
 */
public class ResultUtil<T> {

    private ResultUtil() {
    }


    /**
     * 成功返回结果
     */
    public static <T> Result<T> success() {
        return new Result<>(
                EResultCode.SUCCESS.getCode(),
                EResultCode.SUCCESS.getDesc(),
                null
        );
    }

    /**
     * 成功返回结果
     *
     * @param data 获取的数据
     */
    public static <T> Result<T> success(T data) {
        return new Result<>(EResultCode.SUCCESS.getCode(),
                EResultCode.SUCCESS.getDesc(),
                data);
    }

    /**
     * 成功返回结果
     *
     * @param successCode 提示码
     */
    public static <T> Result<T> success(Integer successCode) {
        return new Result<>(successCode);
    }

    /**
     * 成功返回结果
     *
     * @param successCode 提示码
     * @param desc        描述
     */
    public static <T> Result<T> success(Integer successCode, String desc) {
        return new Result<>(successCode, desc);
    }

    /**
     * 成功返回结果
     *
     * @param successCode 提示码
     * @param data        获取的数据
     */
    public static <T> Result<T> success(Integer successCode, T data) {
        return new Result<>(successCode, "", data);
    }

    /**
     * 成功返回结果
     *
     * @param successCode 提示码
     * @param data        获取的数据
     * @param desc        提示信息
     */
    public static <T> Result<T> success(Integer successCode, T data, String desc) {
        return new Result<>(successCode, desc, data);
    }

    /**
     * 成功返回结果
     *
     * @param errorCode 封装API的返回码
     */
    public static <T> Result<T> success(IResultCode errorCode) {
        return new Result<>(errorCode.getCode(), errorCode.getDesc(), null);
    }

    /**
     * 成功返回结果
     *
     * @param errorCode 封装API的返回码
     * @param data      获取的数据
     */
    public static <T> Result<T> success(IResultCode errorCode, T data) {
        return new Result<>(errorCode.getCode(), errorCode.getDesc(), data);
    }







    /**
     * 失败返回结果
     */
    public static <T> Result<T> failed() {
        return new Result<>(
                EResultCode.FAILED.getCode(),
                EResultCode.FAILED.getDesc(),
                null);
    }

    /**
     * 失败返回结果
     *
     * @param desc 错误信息
     */
    public static <T> Result<T> failed(String desc) {
        return new Result<T>(
                EResultCode.FAILED.getCode(),
                desc,
                null);
    }

    /**
     * 失败返回结果
     *
     * @param resultCode 返回码
     */
    public static <T> Result<T> failed(Integer resultCode) {
        return new Result<T>(
                resultCode,
                "",
                null);
    }

    /**
     * 失败返回结果
     *
     * @param errorCode 错误码
     */
    public static <T> Result<T> failed(IResultCode errorCode) {
        return new Result<>(
                errorCode.getCode(),
                errorCode.getDesc(),
                null);
    }

    /**
     * 失败返回结果
     *
     * @param errorCode 错误码
     * @param desc      错误信息
     */
    public static <T> Result<T> failed(Integer errorCode, String desc) {
        return new Result<>(errorCode, desc);
    }

    /**
     * 失败返回结果
     *
     * @param errorCode 错误码
     * @param data      数据
     */
    public static <T> Result<T> failed(IResultCode errorCode, T data) {
        return new Result<T>(errorCode.getCode(),
                errorCode.getDesc(),
                data);
    }

    /**
     * 失败返回结果
     *
     * @param errorCode 错误码
     * @param desc      错误信息
     * @param data      数据
     */
    public static <T> Result<T> failed(Integer errorCode, String desc, T data) {
        return new Result<>(errorCode, desc, data);
    }


}
